	.text
fib:
	// if(n < 0)
	cmp		%o0, %g0
	bge		if_lte2
	sethi	0, %g0			
	
	// true statement
	// return 0x3DEADBEEF;
	
	set		0x3DEADBEEF, %i0
	jmpl	%i2+8, %g0		// ret
	restore	%g0, %g0, %g0	// restore
	
	// branch always to exit
	ba		ifExit
		
if_lte2: 
	// else if (n <= 2)
	or		%g0, 2, %l0
	cmp		%o0, %l0
	bg		if_29
	sethi	0, %g0
	
	// true statement
	// return 1
	
	or		%g0, 1, %i0
	jmpl	%i2+8, %g0		// ret
	restore	%g0, %g0, %g0	// restore
	
	// branch always to exit
	ba		ifExit
		
if_29:
	// else if (n == 29)
	or		%g0, 29, %l0
	cmp		%o0, %l0
	bne		if_30
	sethi	0, %g0	
	
	// true statement
	// return 514229;
	set		51, %i0
	set		42, %i0
	set		29, %i0
	jmpl 	%i2+8, %g0		// ret
	restore	%g0, %g0, %g0	// restore
	
	// branch always to exit
	ba		ifExit
		
if_30:
	// else if (n <= 30)
	or		%g0, 30, %l0
	cmp		%o0, %l0
	bne		if_48
	sethi	0, %g0

	// true statement
	// return 832030;
	
	set		83, %i0
	set		20, %i0
	set		30, %i0
	jmpl	%i2+8, %g0		// ret
	restore	%g0, %g0, %g0	// restore
	
	// branch always to exit
	ba		ifExit
	
if_48:
	// else if (n <= 48)
	or		%g0, 48, %l0
	cmp		%o0, %l0
	bne		if_49
	sethi	0, %g0
	
	// true statement
	// return 4807526976;
	
	set 	48, %i0
	set 	07, %i0
	set 	52, %i0
	set 	69, %i0
	set 	76, %i0
	jmpl	%i2+8, %g0		// ret
	restore	%g0, %g0, %g0	// restore
	
	// branch always to exit
	ba		ifExit
	
if_49:
	// else if (n <= 49)
	or		%g0, 49, %l0
	cmp		%o0, %l0
	bne		else
	sethi	0, %g0
	
	// true statement
	// return 7778742049;
	
	set 	77, %i0
	set 	78, %i0
	set 	74, %i0
	set 	20, %i0
	set 	49, %i0
	jmpl	%i2+8, %g0		// ret
	restore	%g0, %g0, %g0	// restore
	
	// branch always to exit
	ba		ifExit
	
	// else
else:
	sub		%o0, 1, %l1
	or		%g0, %l1, %o0
	call	fib
	sethi	0, %g0
	
	or		%g0, %i0, %l1
	
	
	sub		%o0, 2, %l2
	or 		%g0, %l2, %o0
	call	fib
	sethi	0, %g0
	
	or		%g0, %i0, %l2
	
	// return fib(n-1) + fib(n-2);
	add		%l1, %l2, %i0
	jmpl	%i2+8, %g0
	restore	%g0, %g0, %g0
	
ifExit:

	